摘要(Abstract)
本文主要是将 DKT 模型和两个著名的知识模型(PFA 和 BKT)进行对比.除此之外,为了弄清楚 DKT 内部计算结构,我们也从数据格式的角度进行了研究.我们使用 Tensorflow 框架和 DKT 算法重现了 DKT 实验,同时在新的数据集上再现了相似的结果.我们发现当对数据集进行适当整理(例如题目限定在非脚手架(nonscaffolding)问题,脚手架问题可以看作是要解决当前问题需要解决的前置问题,两个问题之间相当于搭了一个脚手架)后,DKT 并没有全面超越 PFA.更重要的是,在对 DKT 进行研究的过程中,我们不仅发现了目前的公开数据集中的数据质量问题,也找到了 DKT 在处理多技能序列(multiple skill sequences)中存在的问题.
简介(Introduction)
- DKT 模型相较 BKT 取得了长足进步,并且声称能够发现技能概念中存在的隐含结构,还能对教学进行优化.
- 为了验证 DKT 模型的效果,我们采用了他们的理论、算法以及代码,并且将它们放在相同的数据集中进行测试,这时我们在乎的是可重现.而后,我们还使用了新的数据集对 DKT 进行测试,其中包括 Assistments 数据集(2014-2015 学年).
- 在对原始 DKT 的测试中,我们发现了三个问题,而这些能急剧降低 DKT 算法的有效性.1)、报告中的数据错误;2)、技能标签的不连续;3)、使用了被 PFA 和 BKT 所忽视的信息.
深度知识追踪和其他的学生建模技术(DEEP KNOWLEDGE TRACING AND OTHER STUDENT MODELING TECHNIQUES)
LSTM:
- 介绍 LSTM 的两个门:遗忘门和输入门.
- LSTM 的有些单元被称作常量木马错误(constant error carousels,CEC),CEC 使用激活函数 f,但是这个激活函数是一个恒等函数,并且拥有一个权重固定为 1 的自连接.由于 f 的倒数为 1,所以通过 CEC 反向传播的误差就无法发生梯度消失或梯度爆炸问题.这些 CEC 单元被连接到了多个非线性自适应单元中,这些单元被用来学习非线性行为.
- CEC 是 LSTM 能够经历数千时间步之后仍然能够找到重要事件的原因,而一般的 RNN 常常在 10 个时间步之后就丢失了信息.LSTM 解决了很多之前无法解决的问题,并且在可靠性和速度上都有一定保障.
- 在 DKT 中,任何时间步的 RNN 输入都是学生当前时刻所答问题的表现.由于 RNN 只接受固定长度的输入向量,所以我们使用独热编码对学生表现进行编码.独热编码中这个单独的 1 在向量中有两个含义:回答的是哪个知识点以及该知识点是否回答正确.
BKT:
- BKT 模型是一个而状态动态贝叶斯网络,其中学生的表现是观测状态,学生的掌握情况是隐含状态,该模型使用学生的表现情况来评估学生对于知识的掌握情况.
- 标准的 BKT 模型定义了四个参数:初始知识掌握(initial knowledge)、学习率(learning rate)、做错率(slip)以及猜对率(guess).前两个参数可以看作是学生的先验知识掌握情况(initial knowledge)以及学生通过学习之后可能掌握的概率(learning rate),后两个参数代表了掌握知识的情况下答错的情况(slip)以及没有掌握知识的情况下答对的概率(guess),Guess 可以看作假阳性(false positive),slip 可以看作假阴性(false negative).
- BKT 使用 EM 算法对上面的四个参数进行更新,除第一个问题之外,学生每道题的答题状况都能被计算.
- 但是 BKT 存在一个问题,那就是它的参数是和知识点相关的,这导致它无法很好处理含有多个知识点的题目,因为它对于历史数据的观测是基于单个知识点的,解决方式是可以将多个知识点连接成单一知识点或者可以将多个知识点重复的用于解决单一问题,这样的结果就是一个多知识点问题就是多个单知识点问题的集合.
PFA:
- PFA 全称 Performance Factors Analysis,PFA 是对学习进行解构的方法,它可以用来对多知识点题目进行处理.简单来讲,它将学生表现作为因变量放入了标准逻辑回归中.
- 它其实是将 LFA 进行了重新配置,去掉了学生变量,将知识点变量换成了题目本身.
- 这个模型对包括每个题目难度以及对同一类型题目,在前一道题答对或者答错的情况下技能掌握情况的两个参数在内的参数进行了评估
- 之前的比较发现 PFA 的表现要优于 BKT,这可能是与 BKT 算法无法达到全局最优而只能达到局部最优相关
- 除了对 DKT、BKT 以及 PFA 进行比较理论比较,我们也对它们的输入进行了比较


方法和数据集(METHODOLOGY AND DATA SETS )
使用 Tensorflow 实现了 DKT(Implementation of Deep Knowledge Tracing in Tensorflow)
- Tensorflow 版的 DKT 类似于一个由一堆节点组成的有向图,有关损失函数以及神经元个数等参数基本上与原 DKT 论文保持一致
数据集
ASSISTments 2009-2010 数据集
- 原 DKT 使用了该数据集进行实验,这个数据集来源于 ASSISTments 技能培养问题集,这个问题集要求学生通过做类似结构的问题习得某项技能,如果能够在一行测试中答对 n 题就算过关(n 一般取 3).而通过之后,学生就不再重复做相同技能的题目.这个数据集总共有 52 万多行,总共包含 4217 个学生 ID 以及 124 个知识点.原 DKT 在该数据集上取得了 0.86 的 AUC 成绩,这远远好于使用 BKT 的效果,但是在研究过程中,我们发现了一些问题
- 问题一是重复数据. 在该数据集中有 23.6%的数据存在重复,在我们的研究中剔除了这类数据
- 问题二是将脚手架问题和主问题混为一谈. 脚手架问题一般来说是为主问题进行搭桥而设计的,所以不能将它和主问题混为一谈,在 BKT 和 PFA 中都排除了脚手架问题,而在原 DKT 中却保留了,这可能导致原 DKT 获得了更多的信息,所以拿它的预测结果和 BKT 的预测结果相比较存在不公平,总共有 73466 个脚手架问题
- 问题三是重复回答了不同知识点标签的问题序列. 一般来说一个问题只对应一个知识点标签,但是对于内容设计者而言,一个问题集可能有多个知识点,特别是对于专项训练来说,可能所有的问题都是同一个知识点.那么当对整个数据集进行解构的过程中,可能将包含多个知识点的问题打上了单个标签,但实际上它包含了多个知识点.这种包含了重复信息的数据可能使得 RNN 获得额外信息,影响到权重.
- 举例来说,我们假设一个场景,一个学生做两道题,这两道题分别被标记成知识点 A 和知识点 B,学生先答对了其中一题,后打错了另外一题.此类格式的数据可以被利用到 BKT 中,因为 BKT 可以分别为知识点 A 和知识点 B 进行建模,但是将这个序列放入 DKT 中时,DKT 的知识点 B 的正确与否却表现出了和知识点 A 高度一致的情况(这里就是说 BKT 是针对知识点单独进行建模,而 DKT 更多是对做题模式进行匹配)

- 有一种处理多知识点问题的方式就是将这些知识点整合成一个知识点,这样 DKT 就没法重复利用知识点了,并且 PFA 和 BKT 也能采用同样的数据格式

- 为了探究脚手架问题以及多知识点问题的影响,我们从 ASSISTments 2009-2010 数据集中提出了三份数据集

ASSISTments 2014-2015 数据集
- 09-10 年度的数据集已经比较久远,不太能够代表当前使用 ITS 环境下学习的学生对于知识的掌握情况,所以我们从 14-15 学年的数据集中随机选取了 100 个知识点,总共得到了 70 多万条记录,我们尽量保证不出现重复数据,并且每个问题集只与一个知识点相关联
KDD Cup 2010 数据集
- KDD Cup 的数据来源于认知代数导学(Cognitive Algebra Tutor)系统,虽然它和 ASSISTments 数据集都是关于数学技能方面的考察,但是侧重点有所不同。ASSIST 侧重于日常的学生功课以及对课程的复习,而导学系统是教学环节的一部分,并且对问题解决过程提供了更多的支持.另外一点区别在于导学系统的问题都是由包含多个知识点的问题组合而成,它使用知识追踪对学生是否掌握知识点进行评估.一旦你掌握了某个知识点,导学系统就不会再要求你学那个知识点了,转而去学其他未掌握的知识点.
- KDD 数据集体量比 ASSISTments 数据集要大,在 KDD 上使用 PFA 的一个原因是为了评估每个项目的难度.我们选用了问题名和阶段名相组合的方式,但是有很多组合只有 1 名学生回答,这会造成过拟合和数据泄露,所以后来我们使用了知识点难度信息代替了难度值.排除掉那些包含缺失值的行之后,我们总共得到了 60 多万的数据,学生的回答正确率在 75%以上,我们筛选出来的数据集包含了 574 名学生在 436 个数学知识点上的回答情况.

结果(RESULTS)
- 每个模型下的学生表现预测情况都经过了 AUC 和皮尔森平方相关系数的检验.AUC 和皮尔森平方相关系数为结果非 1 即 0 的测量提供了比较可靠的评价方法,AUC 分数越高则代表精度越高,r2代表观测变量和需要预测的因变量之间相关系数的平方,一般来说 r2代表了数据集的方差,它并不能直接评价模型值的好坏,不过我们可以通过变量对方差的比例进行测量.r2和 RMSE 相类似,不过它的解释性更好.比如对 RMSE 来说,0.3 这个数值在不清楚数据集具体情况的条件下无法判断是好还是坏,但是 r2=0.8 表示模型能很好解释数据集中大部分变异性(variability)发生的原因.
- 每个数据集都经过了 5 折交叉验证,并且所有参数都是通过数据学习而来.对于 BKT,我们使用 EM 算法经过 200 次迭代计算;对于 DKT,我们经过 100 轮 epoch

对结果的分析
- 在 ASSISTments 数据集中,DKT 方法的两种实现都取得了比 PFA 更好的性能,并且没有受到移除脚手架问题(09-10 (a)和 09-10 (b).)所带来的影响;另一方面,PFA 的性能也得到了一定的提高,这也能是因为脚手架问题被移除之后降低了数据的干扰
- 在 09-10(c)数据集上,DKT 的性能损失巨大,因为这个数据集将多个知识点联结成了单个知识点,这也印证了我们之前的猜想,那就是重复应答序列对 DKT 模型产生了影响,在 c 和 14-15 的数据集上,PFA 都表现出了和 DKT 相似的性能
- 为对 09-10(b)数据集上的重复数据进行更深入的研究,我们将预测结果一分为二,一边为对前列数据(leading records)的预测,另一边为重复数据点的预测.在重复数据上,DKT 表现出了几乎完美的性能,而在前列数据上却表现不佳,不过值得说明的是,就算如此,它的表现依然比 c 数据集要表现好,c 数据集是将多个知识点进行融合从而避免了重复知识点的那个数据集
- 在 KDD 数据集上,DKT 的两种实现都比 BKT 和 PFA 性能要好,这种现象可能是由于以下几种原因造成的.首先是我们为了避免过拟合和数据泄露,调整了很多问题的难度值,这可能造成该特征的预测效果变差,另一种原因可能是 KDD 的数据集没有很好区分主问题和脚手架问题,而 PFA 无法很好利用这种数据结构,导致 DKT 表现要更好
讨论和贡献(DISCUSSION AND CONTRIBUTION)
- 在这篇文章中,我们对 BKT 以及 PFA 和 DKT 进行了比较,我们将这些方法放在了 5 种数据集中进行测试.但是和我们所预期的相反,DKT 相较于 BKT 和 PFA 并没有表现出碾压性的性能提升,并且虽然 DKT 在 KDD 数据集上的表现更加,但是我们认为这是由于 KDD 的固有结构造成,它的结构对 PFA 不太适用.
- 第二个有趣的发现是对于包含多个知识点的问题经过转换成为重复应答序列后,DKT 的性能表现比 BKT 和 PFA 表现更佳,这是因为 RNN 具有记住序列数据的能力.
- 公共数据集存在数据重复的问题
将来的工作和总结(FUTURE WORK AND CONCLUSION)
- 可以更多利用学生特征(先验知识、完成率、学习时间等因素)以及题目因素(题目难度、知识点的传承性等因素)
- 虽然 DKT 存在一些问题,但是它依旧表现出了良好的性能,如果给 DKT 更多特征,它能够取得更佳的表现
Going Deeper with Deep Knowledge Tracing
论文链接:http://www.educationaldatamining.org/EDM2016/proceedings/paper_133.pdf